5
10
11preProcessing(QueryTime) :-
12 findall((Id1,Id2,Threshold),
13 (
14 iePList(Id1, distance(Id1,Id2,Threshold)=true, _, _),
15 retract(iePList(Id1, distance(Id1,Id2,Threshold)=true, _, _))),
16 _),
17 18 findall((Id1,Id2), (id_pair(Id1,Id2), aux1(Id1,Id2,QueryTime)), _).
19
21aux1(Id1, Id2, QueryTime) :-
22 findall((T,Dist), h(distance(Id1,Id2,Dist)=true, T), DistList),
23 24 findall(Threshold, (threshold(_,Threshold), aux2(Threshold,DistList,QueryTime,Id1,Id2)), _).
25
27aux2(Threshold, List, QueryTime, Id1, Id2) :-
28 setof(T, member((T,Threshold),List), PointList), !,
29 30 makeIntervalsFromAllPoints(PointList, 40, QueryTime, [], L),
31 assert(iePList(Id1, distance(Id1,Id2,Threshold)=true, L, [])).
32
34aux2(_Threshold, _List, _QueryTime, _Id1, _Id2).
35
36
37
40
41threshold(fight, 24).
42threshold(interact, 25).
43threshold(leave, 30).
44threshold(meet_move, 34).
45
46
47h(distance(Id1,Id2,Dist)=true, T) :-
48 holdsAtIE(coord(Id1,X1,Y1)=true, T),
49 holdsAtIE(coord(Id2,X2,Y2)=true, T),
50 XDiff is abs(X1-X2),
51 YDiff is abs(Y1-Y2),
52 SideA is XDiff*XDiff,
53 SideB is YDiff*YDiff,
54 Temp is SideA+SideB,
55 D is sqrt(Temp),
56 compareWithDistanceThresholds(D, Dist).
57
58
59compareWithDistanceThresholds(D, Threshold) :-
60 threshold(_, Threshold),
61 D=<Threshold, !.
62